Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πρόσβαση στα περιεχόμενα ενός ListView

Îåêßíçóå áðü ôï ìÝëïò tarasiadis. Τελευταία δημοσίευση από το μέλος KelMan στις 26-04-2009, 18:39. Υπάρχουν 1 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  23-04-2009, 23:01 50202

    Πρόσβαση στα περιεχόμενα ενός ListView

    Καλησπέρα σε όλους σας,
    αυτό είναι το πρώτο μου post καθώς ξεκίνησα να ασχολούμαι με desktop εφαρμογές μετά από εμπειρία σε online εφαρμογές (php, mysql, javascript).

    Έχω ξεκινήσει μια εφαρμογή σε WPF C# έχοντας ορίσει ένα stackpanel που περιέχει ένα Listview με το οποίο προβάλω σωστά τα περιεχόμενα ενός πίνακα της βάσης μου (SQL SERVER 2005). Από όσο είδα γίνεται με πολλούς άλλους τρόπους (πχ datagrid) αλλά το θεώρησα πιο απλό με list και μου φαίνεται καλό προς το παρόν.

    Το xaml μου έχει ως εξής:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <StackPanel DataContext="{Binding Source={StaticResource TaskView}}">
    <ListView x:Name="ListViewOfTasks" AlternationCount="2"
    IsSynchronizedWithCurrentItem="True"
    ItemsSource="{Binding Source={StaticResource TaskView}}" Background="Transparent" Width="400" VerticalAlignment="Top" HorizontalAlignment="Left" ScrollViewer.VerticalScrollBarVisibility="Auto" FontSize="11" Height="240">
    <ListView.ItemTemplate>
    <DataTemplate>
    <Grid>
    <Grid.RowDefinitions>
    <RowDefinition Height="20"/>
    <RowDefinition Height="20"/>
    <RowDefinition Height="20"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="270"/>
    <ColumnDefinition Width="100"/>
    </Grid.ColumnDefinitions>
    <TextBlock Name="textBlockName" Text="{Binding Path=name}" TextWrapping="Wrap" Foreground="White" Grid.Row="0" Grid.RowSpan="3" FontSize="11" />
    <TextBlock Name="textBlockStatus" Text="{Binding Path=status}" Foreground="White" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Right" FontSize="11" />
    <Image Name="buttonTaskStatus" Source="Images/ok_128.png" Height="20" Width="20" MouseLeftButtonUp="Button_Click_Change_Task_Status" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Right" />
    <TextBlock Name="textBlockPriority" Text="{Binding Path=priority}" Foreground="White" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Right" FontSize="11" />
    <TextBlock Name="textBlockDate" Text="{Binding Path=imerominia_kataxorisis}" Foreground="White" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Right" FontSize="11" />
    </Grid>
    </DataTemplate>
    </ListView.ItemTemplate>
    </ListView>
    </StackPanel>
    Όπως θα παρατηρήσετε στην γραμμή 19 έχω ορίσει ένα image με action MouseLeftButtonUp="Button_Click_Change_Task_Status" με το οποίο θέλω να κάνω κλικ στο αντίστοιχο εικονίδιο και να "τραβάω" τα περιεχόμενα του συγκεκριμένου item της λίστας. Στην συνέχεια να κάνω έναν έλεγχο (πχ στο Text του TextBlock με όνομα textBlockStatus) και αναλόγως την τιμή του να αλλάζω την τιμή κάποιου άλλου TextBlock.

    Προσπαθώντας λοιπόν να ορίσω την συνάρτηση αυτή έχω κολήσει παρακάτω:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     private void Button_Click_Change_Task_Status(object sender, RoutedEventArgs e)
    {
    try
    {
    ListViewOfTasks.Items.CurrentItem..... και εδώ θέλω να πάρω την τιμή κάποιου texkblock
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.ToString());
    }
    }

    Δεν μπορώ όμως να καταλάβω πως θα αναφερθώ στο item της λίστας που γίνεται κλικ και πως να πάρω την τιμή κάποιου textblock.
    Καμιά ιδέα. θα μου φανεί χρήσιμη κάθε πληροφορία διότι δεν έχω τις απαραίτητες γνώσεις.
    Ευχαριστώ.
  •  26-04-2009, 18:39 50255 σε απάντηση της 50202

    Απ: Πρόσβαση στα περιεχόμενα ενός ListView

    Λογικά, αν γυρίσεις το CurrentItem σε τύπο του object που γίνεται bind πάνω στο ListView θα μπορέσεις να έχεις reference στα properties του binded object, οπότε μετά να διαβάσεις τα properties και να τους αλλάξεις τις τιμές ώστε να εμφανιστούν οι νέες στο control. Δηλαδή, το CurrentItem του ListView δεν περιέχει τα UI elements του DataTemplate αλλά το object που γίνεται bind πάνω σε αυτά.

    Άσχετο: Καλό είναι να ακολουθείς παντού τον κανόνα του να χρησιμοποιείς το x:Name="..." αντί του Name="..." To δεύτερο είναι για το WPF namespace ενώ το πρώτο για το XAML namespace, που σημαίνει ότι μπορεί να βρεθούν κάποια elements ποy να μην υποστηρίζουν το δεύτερο, εντούτοις εσύ να θες να τα ονομάσεις για να τα χρησιμοποιήσεις μέσα στον κώδικά σου.


    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems